查看原文
其他

关于库引生出来的话题

strongerHuang strongerHuang 2021-01-31


本篇技术文章的内容在前面已经分享过,写本文的主要目的在于想在这里告诉各位关注我的人:我分享过的内容,如果你没有看,回头你又来问我这类问题,我基本上不会回答。请大家换位思考,体谅一下哦!

有种情况我可以理解,就是:你问我的问题,在你关注我之前我分享了此类文章,这种情况我可以理解,我也会尽量回答!假如:你2016-08-10关注了我,而我在2017-02-10分享了一篇文章,到2017-07-10你问了我2017-02-10分享文章里面的内容,那么我看见了基本都不会回答。


好了,上面说的好像有点严肃。其实,我这个人还是很好说话的,这不,就放出了下面这篇技术文章。PS:这篇文章就是上面说的一位读者问的问题。这类问题应该是大部分人应该理解的,故在这里再重新整理来分享给大家。


写在前面

库,对于编程的人来说,都应该知道。但有很多初学者,及已经工作的朋友对库的理解还处于书本概念阶段,也就是自己没有生成及使用过库。

 

其实,还有很多朋友不知道printf打印函数是怎么回事,我们在代码中调用printf函数打印数据时,已经调用了标准的“微库”,这里可以参看我的文章:关于printf和scanf在开发STM32中的配置和应用


什么情况下要生成库?

1.代码模块化定型。也就是说模块代码的功能在经过无数次验证,并无误后,方便团队的协同开发,这个时候可以将模块代码生成库。

 

2.提供SDK给客户开发。这里一般是指源代码对客户不具有公开性的原因,包括某些特有算法、实现特有功能的具体过程等。

 

生成库的原则?

简单来说就是使代码结构化、模块化、源码不具公开性等。要求代码高内聚低耦合


Keil、IAR如何生成库?

代码工程生成库的过程只需要对工程进行配置即可,这里再简单讲一下过程,其实在我“系列教程”中有相关内容。

 

Keil:Project -> Options for Target -> Output 勾选上“Create Library”即可。

 

IAR:Project -> Options -> General Options -> Output 勾选上“Library”即可。


库在工程的使用方法

“.Lib”、“.a”这种库大家可以理解为“.c”,只是它已经经过处理而已。我们只需要像添加“.c”文件,将其添加到工程即可。如下图,我们将STM32F10x_StdPeriph_Driver标准外设库生成“STM32F10x_StdPeriph_Driver.a”库,添加到工程中:


静态库和动态库的区别?

上面Keil生成的库是以“.Lib”为后缀的文件,IAR是以“.a”为后缀的文件,你们知道他们是静态库还是动态库吗?

 

答案是:二者都是静态库

 

为什么都是静态库呢? 先看一下静态库和动态库的区别就会知道。

 

简单的来说二者的区别:

静态库:就是在编译的时候直接将需要的代码连接进可执行程序中去;

动态库:就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。


从上面的描述可以知道,静态库是我们MCU开发者常用的一种,而动态库常用于Linux、Windows等开发场合。


最后

微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

长按识别二维码 关注


随手点赞是对文章,对作者的支持!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存